function sum(...args) {
  // 使用一个数组来存储传入的参数
  let numbers = [...args];

  // 定义一个函数，用于累积传入的参数
  function innerSum(...innerArgs) {
    // 将新的参数累积到 numbers 数组中
    numbers = [...numbers, ...innerArgs];
    // 返回 innerSum 函数本身以便继续链式调用
    return innerSum;
  }

  // 给 innerSum 函数添加 sumOf 方法，返回累积的结果
  innerSum.sumOf = function () {
    // 计算并返回所有累积参数的和
    return numbers.reduce((acc, num) => acc + num, 0);
  };

  // 初始调用返回 innerSum 函数以便开始链式调用
  return innerSum;
}

// 测试用例
console.log(sum(1, 2).sumOf()); // 返回 3
console.log(sum(1, 2)(3).sumOf()); // 返回 6
console.log(sum(1)(2, 3, 4).sumOf()); // 返回 10
console.log(sum(1, 2)(3, 4)(5).sumOf()); // 返回 15
